# PyQuine
#
# Copyright (c) 2007 Alexis Couronne <www.skitoo.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
# 

import pmock,sqlobject
from core.cardboard import *

class TestCardboard( pmock.MockTestCase ):
    
    def setUp(self):
        sqlobject.sqlhub.processConnection = sqlobject.connectionForURI( 'sqlite:/:memory:' )
        Cardboard.createTable(ifNotExists=True)        
        self.instance = Cardboard( firstLine=(1,20,30,40,50), secondLine=(2,11,21,33,44), thirdLine=(12,23,49,65,82) )
    
    def tearDown(self):
        Cardboard.dropTable()
    
    def testCardboard(self):
        cardboard = Cardboard( firstLine=(1,20,30,40,50), secondLine=(2,11,21,33,44), thirdLine=(12,23,49,65,82) )
        self.assertEquals( cardboard.firstLine, (1,20,30,40,50) )
        self.assertEquals( cardboard.secondLine, (2,11,21,33,44) )
        self.assertEquals( cardboard.thirdLine, (12,23,49,65,82) )
        
        cardboard = Cardboard( firstLine=(1,10,30,40,50), secondLine=(2,11,21,33,44), thirdLine=(12,23,49,65,82) )        
        
        self.assertRaises( TypeError, Cardboard, firstLine=1, secondLine=2, thirdLine=3 )
        self.assertRaises( TypeError, Cardboard, firstLine=(1,10,20,30,40), secondLine=(2,11,21,33,44), thirdLine=(12,23,49,65) )
        self.assertRaises( TypeError, Cardboard, firstLine=(1, 2,"20",30,40), secondLine=(1.2,11,21,33,44), thirdLine=(12,23,49,65,82) )
        
        self.assertRaises( CardboardError, Cardboard, firstLine=(1,3,20,30,40), secondLine=(2,11,21,33,44), thirdLine=(12,23,49,65,82) )
        self.assertRaises( CardboardError, Cardboard, firstLine=(1,10,20,30,40), secondLine=(2,11,21,33,44), thirdLine=(12,23,49,82,90) )
        self.assertRaises( CardboardError, Cardboard, firstLine=(1,13,22,40,56), secondLine=(1,11,21,33,44), thirdLine=(12,23,49,65,82) )
        
        self.assertRaises( CardboardError, Cardboard, firstLine=(1,13,22,40,56), secondLine=(2,11,21,33,44), thirdLine=(12,23,49,65,91) )
        self.assertRaises( CardboardError, Cardboard, firstLine=(0,13,22,40,56), secondLine=(2,11,21,33,44), thirdLine=(12,23,49,65,90) )
        
        
    def testMakeRandomCardboard(self):
        cardboard = makeRandomCardboad()
        self.assertTrue( isinstance(cardboard, Cardboard ) )
        
    def testPersistence(self):
        self.assertEquals( self.instance.id, 1 )
        cardboard = Cardboard.get(1)
        self.assertEquals( cardboard, self.instance )
        